package com.jsyl.lwbk.business.mapper;

import com.jsyl.lwbk.business.domain.EvaluateRecord;
import com.jsyl.lwbk.business.dto.EvaluateModuleScoreDTO;
import com.jsyl.lwbk.business.dto.ModuleMaxCountScoreDTO;
import com.jsyl.lwbk.business.dto.ProjectModuleScoreDTO;
import com.jsyl.lwbk.business.vo.EvaluateSortVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface EvaluateRecordMapper {
    int insert(EvaluateRecord record);

    EvaluateRecord selectById(Long id);

    int updateById(EvaluateRecord record);

    List<EvaluateRecord> selectByChildId(Long childId);

    List<EvaluateRecord> selectByEvaluateNumber(@Param("evaluateNumber") String evaluateNumber);

    EvaluateRecord selectByChildEvaluateNumberQuestionId(@Param("childId") Long childId, @Param("evaluateNumber") String evaluateNumber, @Param("questionId") Long questionId);

    List<EvaluateRecord> selectByChildEvaluateNumber(@Param("childId") Long childId, @Param("evaluateNumber") String evaluateNumber,@Param("questionIds") List<Long> questionIds);

    Integer getCountByProjectModule(@Param("evaluateNumber") String evaluateNumber,@Param("projectModule") Integer projectModule);

    Integer selectCountByChildId(@Param("childId") Long childId, @Param("evaluateNumber") String evaluateNumber);

    EvaluateSortVO selectSortByChildId(@Param("childId") Long childId, @Param("evaluateNumber") String evaluateNumber, @Param("evaluateModule") Integer evaluateModule);

    EvaluateSortVO selectCountMaxByModule(@Param("childId") Long childId, @Param("evaluateNumber") String evaluateNumber, @Param("evaluateModule") Integer evaluateModule);

    EvaluateSortVO selectProjectSortByChildId(@Param("childId") Long childId, @Param("evaluateNumber") String evaluateNumber, @Param("evaluateProject") Integer evaluateProject);


    /**
     * 查询各个测评项目的总分
     *
     * @param evaluateNumber
     * @return
     */
    List<EvaluateModuleScoreDTO> selectEvaluateModuleScore(@Param("evaluateNumber") String evaluateNumber);

    /**
     * 查询出现最多次数的答案
     *
     * @param evaluateNumber
     * @param evaluateModule
     * @return
     */
    ModuleMaxCountScoreDTO findMaxAnswerCount(@Param("evaluateNumber") String evaluateNumber, @Param("evaluateModule") Integer evaluateModule);

    /**
     * 查询各个测评项目的总分
     *
     * @param evaluateNumber
     * @return
     */
    List<ProjectModuleScoreDTO> selectProjectModuleScore(@Param("evaluateNumber") String evaluateNumber);

    /**
     * 查询出现最多次数的答案
     *
     * @param evaluateNumber
     * @param projectModule
     * @return
     */
    ModuleMaxCountScoreDTO findMaxAnswerCountByProjectModule(@Param("evaluateNumber") String evaluateNumber, @Param("projectModule") Integer projectModule);

    Integer selectQuestionNumByProject(@Param("project") Integer project, @Param("evaluateNumber") String evaluateNumber);

    Integer selectUnFinishQuestion(@Param("evaluateNumber") String evaluateNumber);

}